﻿#region

using System;
using System.IO;
using System.Text;
using Newtonsoft.Json;
using WMAAN.Uzytki.Kryptografia;

#endregion

namespace WMAAN.Konfiguracja
{
    public class KonfiguracjaAplikacji : ICloneable
    {
        private const string nazwaPlikuKonfiguracjiAplikacji = "app.json";
        public static readonly string NazwaAplikacji = "Polska Giełda Mieszkaniowa";
        public static readonly string StronaInternetowa = "http://www.wmaan.pl";
        private JsonSerializer serializer = new JsonSerializer();


        public string LokalizacjaMagazynuDanych { get; set; }
        public SerwerMySQL SerwerMySQL { get; set; }
        public SerwerFtp SerwerFtp { get; set; }
        public SerwerPoczty SerwerPoczty { get; set; }

        #region ICloneable Members

        public object Clone()
        {
            return MemberwiseClone();
        }

        #endregion

        public KonfiguracjaAplikacji Wczytaj()
        {
            try
            {
                string json = File.ReadAllText(nazwaPlikuKonfiguracjiAplikacji, Encoding.Unicode);
                var obj = JsonConvert.DeserializeObject<KonfiguracjaAplikacji>(json,
                                                                               new JsonSerializerSettings
                                                                                   {
                                                                                       PreserveReferencesHandling =
                                                                                           PreserveReferencesHandling.
                                                                                           Objects
                                                                                   });
                return obj.Deszyfruj();
            }
            catch (Exception ex)
            {
                //TODO EXCEPTION Nie udało się wczytać konfiguracji z pliku
                return null;
            }
        }

        public void Zapisz()
        {
            try
            {
                KonfiguracjaAplikacji obj = Szyfruj();
                string json = JsonConvert.SerializeObject(obj, Formatting.Indented,
                                                          new JsonSerializerSettings
                                                              {
                                                                  PreserveReferencesHandling =
                                                                      PreserveReferencesHandling.Objects
                                                              });
                File.WriteAllText(nazwaPlikuKonfiguracjiAplikacji, json, Encoding.Unicode);
            }
            catch (Exception ex)
            {
                //TODO EXCEPTION Nie udało się zapisać konfiguracji do pliku
            }
        }

        public KonfiguracjaAplikacji Szyfruj()
        {
            var kopia = (KonfiguracjaAplikacji) Clone();
            kopia.LokalizacjaMagazynuDanych = LokalizacjaMagazynuDanych.Szyfruj();
            kopia.SerwerPoczty = SerwerPoczty.Szyfruj();
            kopia.SerwerFtp = SerwerFtp.Szyfruj();
            kopia.SerwerMySQL = SerwerMySQL.Szyfruj();
            return kopia;
        }

        public KonfiguracjaAplikacji Deszyfruj()
        {
            var kopia = (KonfiguracjaAplikacji) Clone();
            kopia.LokalizacjaMagazynuDanych = LokalizacjaMagazynuDanych.Deszyfruj();
            kopia.SerwerPoczty = SerwerPoczty.Deszyfruj();
            kopia.SerwerFtp = SerwerFtp.Deszyfruj();
            kopia.SerwerMySQL = SerwerMySQL.Deszyfruj();
            return kopia;
        }
    }
}